home *** CD-ROM | disk | FTP | other *** search
- ;===============================================================================
- ;
- ;FICHERO: XMS.ASM
- ;
- ;AUTOR: ANTONIO LADESA JURADO
- ;
- ;FECHA: 24/6/94
- ;
- ;DESCRIPCION:
- ;
- ; Fichero que contiene las estructuras, constantes, variables y funciones
- ; internas y externas para la gestión de memoria XMS.
- ;
- ;===============================================================================
-
-
- ; Desplazamiento para llamadas FAR
- _AOFF EQU 6
-
- ; Segmento de datos
- SEGDATOS MACRO
- PUSH AX
- MOV AX,_DATA
- MOV DS,AX
- POP AX
- ENDM
-
- XMEM_TEXT SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:XMEM_TEXT,DS:_DATA
-
- ;---- CODIFICACION DE LAS FUNCIONES OFRECIDAS ----------------------------------
-
-
- ;---- FUNCION: extern int XMSmemIniciar(void) ----------------------------------
- ;
- ; Descripción:
- ;
- ; Detecta la presencia del driver de memoria extendida.
- ;
- ; Retorno:
- ;
- ; - Número de la versión
- ; - 0 si no está instalado
- ;
- ;---- CODIGO: ------------------------------------------------------------------
-
- PUBLIC _XMSmemIniciar
- _XMSmemIniciar PROC FAR
- PUSH BP
- MOV BP,SP
-
- ; llamada al driver
- MOV AX,4300H
- INT 2FH
- CMP AL,80H
- JE INI1
-
- ; si el driver no esta presente devuelve -1
- MOV AX,0FFFFH
- JMP INI2
-
- ; si el driver esta presente...
- INI1: MOV AX,4310H
- INT 2FH
- MOV WORD PTR CS:[_CONTOFF],BX
- MOV WORD PTR CS:[_CONTSEG],ES
-
- ; devuelve la version
- XOR AX,AX
- CALL CS:[CONTROL]
-
- ; retorno
- INI2: SEGDATOS
- POP BP
- RET
- _XMSmemIniciar ENDP
-
- ;---- FIN FUNCION --------------------------------------------------------------
-
- ;---- FUNCION: extern int XMSmemMover(XMSBloque *p) ----------------------------
- ;
- ; Descripción:
- ;
- ; Mueve un bloque de memoria XMS
- ;
- ; Parámetros:
- ;
- ; XMSBloque *p: puntero al bloque.
- ;
- ; Retorno:
- ;
- ; - 1 si mueve el bloque.
- ; - 0 si no
- ;
- ;---- CODIGO: ------------------------------------------------------------------
-
- PUBLIC _XMSmemMover
- _XMSmemMover PROC FAR
- PUSH BP
- MOV BP,SP
-
- ; Direccion de la estructura
- MOV SI,[BP+_AOFF+0]
- MOV DS,[BP+_AOFF+2]
-
- ; Mover
- MOV AH,11
- CALL CS:[CONTROL]
-
- ; Retorno
- SEGDATOS
- POP BP
- RET
- _XMSmemMover ENDP
-
- ;---- FIN FUNCION --------------------------------------------------------------
-
- ;---- FUNCION: extern int XMSmemLiberar(int h) ---------------------------------
- ;
- ; Descripción:
- ;
- ; Esta función libera memoria XMS.
- ;
- ; Parámetros:
- ;
- ; int h: gestor de memoria XMS
- ;
- ; Retorno:
- ;
- ; - 1 si libera.
- ; - 0 si no.
- ;
- ;---- CODIGO: ------------------------------------------------------------------
-
- PUBLIC _XMSmemLiberar
- _XMSmemLiberar PROC FAR
- PUSH BP
- MOV BP,SP
-
- MOV DX,[BP+_AOFF+0]
- MOV AH,10
- CALL CS:[CONTROL]
-
- SEGDATOS
- POP BP
- RET
- _XMSmemLiberar ENDP
-
- ;---- FIN FUNCION --------------------------------------------------------------
-
- ;---- FUNCION: extern int XMSmemReservar(int n) --------------------------------
- ;
- ; Descripción:
- ;
- ; Esta función reserva memoria XMS (en Kbytes)
- ;
- ; Parámetros:
- ;
- ; int n: número de Kbytes a reservar
- ;
- ; Retorno:
- ;
- ; - Gestor de memoria XMS
- ; - -1 si hubo error
- ;
- ;---- CODIGO: ------------------------------------------------------------------
-
- PUBLIC _XMSmemReservar
- _XMSmemReservar PROC FAR
- PUSH BP
- MOV BP,SP
-
- MOV DX,[BP+_AOFF+0]
- MOV AH,9
- CALL CS:[CONTROL]
-
- OR AX,AX
- JZ RES1
-
- MOV AX,DX
- JMP RES2
-
- RES1: MOV AX,0FFFFH
-
- RES2: SEGDATOS
- POP BP
- RET
- _XMSmemReservar ENDP
-
- ;---- FIN FUNCION --------------------------------------------------------------
-
- ;---- FUNCION: extern long PunteroALong(char *p) -------------------------------
- ;
- ; Descripción:
- ;
- ; Convierte puntero a long.
- ;
- ; Parámetros:
- ;
- ; char *p: puntero a convertir
- ;
- ; Retorno:
- ;
- ; - puntero convertido a long
- ;
- ;---- CODIGO: ------------------------------------------------------------------
-
- PUBLIC _PunteroALong
- _PunteroALong PROC FAR
- PUSH BP
- MOV BP,SP
-
- MOV AX,[BP+_AOFF+0]
- MOV DX,[BP+_AOFF+2]
-
- SEGDATOS
- POP BP
- RET
- _PunteroALong ENDP
-
- ;---- FIN FUNCION --------------------------------------------------------------
-
- ; Funcion de retorno -1 para funciones no implementadas
-
- _DUMMY PROC FAR
- MOV AX,0FFFFH
- RET
- _DUMMY ENDP
-
- ;---- FIN FUNCION --------------------------------------------------------------
-
- ; variables
-
- CONTROL LABEL DWORD
- _CONTOFF DW _DUMMY
- _CONTSEG DW XMEM_TEXT
-
- XMEM_TEXT ENDS
-
- ; segmentos
-
- DGROUP GROUP _DATA,_BSS
- _DATA SEGMENT WORD PUBLIC 'DATA'
- _DATA ENDS
-
- _BSS SEGMENT WORD PUBLIC 'BSS'
- _BSS ENDS
- END
-